package com.leetBook.Krahets.linkedList;

import java.util.ArrayList;

/**
 * 《图解算法与数据结构》链表第 4 题：给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号，请查找并返回倒数第 cnt 个训练项目编号。
 */
public class GetOne {
//    public ListNode trainingPlan(ListNode head, int cnt) {
//        ArrayList<ListNode> listNodes = new ArrayList<>();
//        while(head != null){
//            listNodes.add(head);
//            head = head.next;
//        }
//
//        return listNodes.get(listNodes.size() - cnt);
//    }

    /**
     * 官方解答
     * former 用于计算从 cnt 节点到末尾的数量，而head节点，就从开头走对应数量，得到想要的节点
     */
    public ListNode trainingPlan(ListNode head, int cnt) {
        ListNode former = head, latter = head;
        for(int i = 0; i < cnt; i++) {
            if(former == null) return null;
            former = former.next;
        }
        while(former != null) {
            former = former.next;
            latter = latter.next;
        }
        return latter;
    }
}
